package br.com.imob.dao;

import br.com.imob.modelo.Corretor;

import java.util.List;

/**
 *
 * @author Gilton Nascimento
 */
public class CorretorDao extends GenericDao {

    public CorretorDao() {}

    public Integer adicionarCorretor(Corretor corretor) {
        saveOrUpdatePojo(corretor);
        return corretor.getCorretorId();
    }

    public void removerCorretor(Corretor corretor) {
        removerPojo(corretor);
    }

    /* Precisa definir o ID */
    public void atualizarCorretor(Corretor recupera) {
        saveOrUpdatePojo(recupera);
    }
    
    
	/**
	 * Editar um Corretor
	 * @param String oldCorretor
	 * @param String newCorretor
	 */
	public void atualizarCorretor(String oldCorretor, String newCorretor ) {
		if ( ( !"".equals(oldCorretor) && oldCorretor != null )
			&& ( !"".equals(newCorretor) && newCorretor != null ) ) 
			atualizarCorretor( getCorretorQNamedCreci(oldCorretor), new Corretor(newCorretor) );
	}
    

    /* Precisa definir qual atribuito sera a chave a identificar
     * a tupla a ser alterada */
    public void atualizarCorretor(Corretor recuperar, Corretor alterar) {
        recuperar = retriveCorretor(recuperar);

//  Creci
        if (alterar.getCreci() != null)
            recuperar.setCreci(alterar.getCreci());
//  Contato
        if ( !alterar.getContato().equals( recuperar.getContato() ) ) 
            recuperar.setContato(alterar.getContato());
//  Endereco
        if (alterar.getEndereco().getEndereco() != null) 
            recuperar.getEndereco().setEndereco(alterar.getEndereco().getEndereco());
//  Pessoa
        if (!alterar.getPessoa().equals(recuperar.getPessoa())) 
            recuperar.setPessoa(alterar.getPessoa());

        saveOrUpdatePojo(recuperar);
    }


    /*Artificio para Recuperar a Tupla de Corretor*/
    protected Corretor retriveCorretor(Corretor recuperar) {
        return getCorretor(recuperar.getCorretorId());
    }

//	Consultas
    public Corretor getCorretor(Integer key) {
        return getPojoByID(Corretor.class, key);
    }

    public Corretor getCorretorByQuery(String query, Object... params) {
        return getPojoByQry(query, params);
    }

//  Creci
    public Corretor getCorretorQNamedCreci(String fltrCreci) {
        return getPojoByQNamed("Corretor.findByCreci", fltrCreci);
    }

    public List<Corretor> getCorretors() {
        return (List<Corretor>) getALL(Corretor.class);
    }

    /*  LIKES */
//  Creci
    public List<Corretor> getCorretorsQNamedCreciPRX(String fltrCreci) {
        return getListByQNamedPRX("Corretor.findLikeByCreci", fltrCreci);
    }
    /* Fim dos Likes */

//LISTAS
//  Prazo
    public List<Corretor> getPessoasQNamedPrazo(String fltrPrazo) {
        return getListByQNamed("Pessoa.findByPrazo", fltrPrazo);
    }
//  Investimento

    public List<Corretor> getPessoasQNamedInvestimento(String fltrInvest) {
        return getListByQNamed("Pessoa.findByInvestimento", fltrInvest);
    }


    /*
    public List<Corretor> getCorretorsQNamedAllPRX(String fltrCorretor, String fltrLoteamento,
    String fltrComplemento, String fltrReferencia) {
    List<Corretor> itensCorretor = getCorretorsQNamedCorretorPRX(fltrCorretor);
    List<Corretor> itensComplemento = getCorretorsQNamedComplementoPRX(fltrComplemento);

    HashSet<Corretor> itens = new HashSet<Corretor>();

    itensCorretor.addAll(itensComplemento);
    itens.addAll(itensCorretor);
    itensCorretor.clear();

    itensCorretor.addAll(itens);
    return itensCorretor;
    }
    */
    
    public List<Corretor> getCorretorsByQuery(String query, Object... params) {
        return getListByQry(query, params);
    }

}